package install.ren.exercise.test.util;

/**
 * @author zhuyunhui
 * @Description: 字节处理工具类
 * @date 2019-04-04 16:15
 */
public class BytesUtils {
    public static String toFullBinaryString(int num) {
        char[] chs = new char[Integer.SIZE];
        for(int i = 0; i < Integer.SIZE; i++) {
            chs[Integer.SIZE - 1 - i] = (char)((num >> i & 1) + '0');
        }
        return new String(chs);
    }


    /**
     * 将 byte 数组转换为 int, 取前 4 位.
     *
     * @param b byte 数据
     * @return int 值
     */
    public static int byteArrayToInt(byte[] b) {
        return b[3] & 0xFF |
                (b[2] & 0xFF) << 8 |
                (b[1] & 0xFF) << 16 |
                (b[0] & 0xFF) << 24;
    }

    /**
     * 将 int 数据转换为 byte 数组
     *
     * @param a int 数据
     * @return byte 数组, 4 位
     */
    public static byte[] intToByteArray(int a) {
        return new byte[]{
                (byte) ((a >> 24) & 0xFF),
                (byte) ((a >> 16) & 0xFF),
                (byte) ((a >> 8) & 0xFF),
                (byte) (a & 0xFF)
        };
    }

    /**
     * 实现字节数组转向十六进制的转换的方法, 默认使用 空格 作为分隔符
     */
    public static String b2h(byte... src) {
        return b2h(" ", src);
    }

    /**
     * 实现字节数组转向十六进制的转换的方法
     *
     * @param split 分割符
     * @param src   字节数组
     * @return Hex String
     */
    public static String b2h(String split, byte... src) {
        if (src == null || src.length <= 0) return null;
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0XFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
            if (split != null && i != src.length - 1) {
                stringBuilder.append(split);
            }
        }
        return stringBuilder.toString().toUpperCase();
    }
}
